import {observable, makeObservable, computed, action, autorun,runInAction} from 'mobx';
// 首先Mobx并不强制所有state的改变必须通过action来改变，这主要适用于一些较小的项目。对于较大型的，需要多人合作的项目来说，可以使用Mobx提供的api configure来强制
const Mobx = require("mobx");
Mobx.configure({ enforceActions: true })
class Store {
    //如对象、数组、类
    // JS基本数据类型、引用类型、普通对象、类实例、数组和映射
    @observable price = 3;// 注册变量，使其成为可检测的

    @observable amount = 1;

    @computed get total() {
        return this.price * this.amount;
    }
    constructor(){
        makeObservable(this);
    }

    @observable length = 2;
    @computed get squared() {
        return this.length * this.length;
    }
    // 用来作“逆向”衍生  将数据按照既定的方式进行复原
    set squared(value) { // 这是一个自动的动作，不需要注解
        this.length = Math.sqrt(value);
    }

    @observable num = 0 ;// 注册变量，使其成为可检测的


    @observable objCfg = {
        name:'react-mobx',
        des:'如果讲的快增加额外课程'
    }
    // 如何修改
    @action
    updateNameStr = (num,str)=>{
        console.log(str)
        this.num = num;
        this.objCfg = {
            name:str,
            des:'如果讲的快增加额外课程'
        }
	};


}
export default Store;
